﻿/*
输入：
4 4
1 2
2 1
1 3
2 4
输出：
1
*/
// N个节点，K条边
string[] NKStr = Console.ReadLine().Split(" ");
int N = int.Parse(NKStr[0]);
int K = int.Parse(NKStr[1]);

// 构建图 -- 邻接表
List<int>[] graph = new List<int>[N+1];
for (int i = 0; i <= N; i++)
{
    graph[i] = new List<int>();
}
for (int i = 0; i < K; i++)
{
    string[] stStr = Console.ReadLine().Split(" ");
    int s = int.Parse(stStr[0]);
    int t = int.Parse(stStr[1]);
    graph[s].Add(t);
}

// 验证完全可达性 -- 深度优先搜索
bool[] visited = new bool[N+1];

void DFS(List<int>[] graph, int curNode)
{
    visited[curNode] = true;
    for (int i = 0; i < graph[curNode].Count; i++)
    {
        // 访问过
        if (visited[graph[curNode][i]]) continue;
        DFS(graph, graph[curNode][i]);
    }
}
DFS(graph, 1);
for (int i = 1; i < visited.Length; i++)
{
    if (!visited[i])
    {
        Console.WriteLine(-1);
        return;
    }
}
Console.WriteLine(1);